home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / ip / ka9q / src.arc / ICMP.H < prev    next >
C/C++ Source or Header  |  1989-08-18  |  3KB  |  103 lines

  1. #ifndef    ECHO_REPLY
  2.  
  3. #include "global.h"
  4.  
  5. /* Internet Control Message Protocol */
  6.  
  7. /* Message types */
  8. #define    ECHO_REPLY    0    /* Echo Reply */
  9. #define    DEST_UNREACH    3    /* Destination Unreachable */
  10. #define    QUENCH        4    /* Source Quench */
  11. #define    REDIRECT    5    /* Redirect */
  12. #define    ECHO        8    /* Echo Request */
  13. #define    TIME_EXCEED    11    /* Time-to-live Exceeded */
  14. #define    PARAM_PROB    12    /* Parameter Problem */
  15. #define    TIMESTAMP    13    /* Timestamp */
  16. #define    TIME_REPLY    14    /* Timestamp Reply */
  17. #define    INFO_RQST    15    /* Information Request */
  18. #define    INFO_REPLY    16    /* Information Reply */
  19.  
  20. #define    ICMP_TYPES    17
  21.  
  22. /* Internal format of an ICMP header (checksum is missing) */
  23. struct icmp {
  24.     char type;
  25.     char code;
  26.      union icmp_args {
  27.         int32 unused;
  28.         unsigned char pointer;
  29.         int32 address;
  30.         struct {
  31.             int16 id;
  32.             int16 seq;
  33.         } echo;
  34.     } args;
  35. };
  36. #define    ICMPLEN        8    /* Length of ICMP header on the net */
  37. #define    NULLICMP    (union icmp_args *)0
  38.     
  39. /* Destination Unreachable codes */
  40. #define    NET_UNREACH    0    /* Net unreachable */
  41. #define    HOST_UNREACH    1    /* Host unreachable */
  42. #define    PROT_UNREACH    2    /* Protocol unreachable */
  43. #define    PORT_UNREACH    3    /* Port unreachable */
  44. #define    FRAG_NEEDED    4    /* Fragmentation needed and DF set */
  45. #define    ROUTE_FAIL    5    /* Source route failed */
  46.  
  47. #define    NUNREACH    6
  48.  
  49. /* Time Exceeded codes */
  50. #define    TTL_EXCEED    0    /* Time-to-live exceeded */
  51. #define    FRAG_EXCEED    1    /* Fragment reassembly time exceeded */
  52.  
  53. #define    NEXCEED        2
  54.  
  55. /* Redirect message codes */
  56. #define    REDR_NET    0    /* Redirect for the network */
  57. #define    REDR_HOST    1    /* Redirect for the host */
  58. #define    REDR_TOS    2    /* Redirect for Type of Service, or-ed with prev */
  59.  
  60. #define    NREDIRECT    3
  61.  
  62. struct icmp_errors {
  63.     unsigned checksum;        /* ICMP Checksum errors */
  64.     unsigned nospace;        /* alloc_mbuf failed someplace */
  65.     unsigned noloop;        /* No ICMP in response to an ICMP */
  66.     unsigned bdcsts;        /* Ignore broadcast ICMPs */
  67. };
  68.  
  69. struct icmp_stats {
  70.     unsigned input[ICMP_TYPES];    /* ICMP input stats by type */
  71.     unsigned output[ICMP_TYPES];    /* ICMP output stats by type */
  72. };
  73. extern struct icmp_errors Icmp_errors;
  74. extern struct icmp_stats Icmp_stats;
  75. extern int Icmp_trace;
  76.  
  77. struct ping {
  78.     struct proc *proc;
  79.     struct session *sp;
  80.     int32 sent;
  81.     int32 srtt;
  82.     int32 mdev;
  83.     int32 responses;
  84.     int16 interval;
  85.     int16 len;
  86. };
  87. /* ICMP messages, decoded */
  88. extern char *Icmptypes[],*Unreach[],*Exceed[],*Redirect[];
  89.  
  90. /* In icmp.c: */
  91. struct mbuf *htonicmp __ARGS((struct icmp *icmp,struct mbuf *data));
  92. void icmp_input __ARGS((struct mbuf *bp,struct ip *ip,int rxbroadcast));
  93. int icmp_output __ARGS((struct ip *ip,struct mbuf *data,char type,char code,
  94.     union icmp_args *args));
  95. int ntohicmp __ARGS((struct icmp *icmp,struct mbuf **bpp));
  96.  
  97. /* In icmpcmd.c: */
  98. void echo_proc __ARGS((int32 source,int32 dest,struct icmp *icmp,struct mbuf *bp));
  99.  
  100. #endif    /* ECHO_REPLY */
  101.  
  102.  
  103.